package br.edu.ufcg.copin.sd;

import java.util.ArrayList;

public class Menssagem {
	
	/**
	 * Enum com o tipo da menssagem
	 */
	private TipoMenssagem tipoDaMenssagem;
	/**
	 * Array de String com os IDs dos nos
	 */
	private ArrayList<Long> pathIda;
	/**
	 * Array de String com a informacao da carga (double) dos nos
	 */
	private ArrayList<Double> loadIda;
	/**
	 * numero que identifica uma transacao (acao) desse algoritmo;
	 * esse numero serve para evitar loops no grafo.
	 */
	private long sessionId;
	/**
	 * A menssagem deve chegar a um no de destino, este atributo refere-se ao
	 * ID do no de destino.
	 */
	private long targetNode;
	
	public Menssagem(){
		
	}

	public TipoMenssagem getTipoDaMenssagem() {
		return tipoDaMenssagem;
	}

	public void setTipoDaMenssagem(TipoMenssagem tipoDaMenssagem) {
		this.tipoDaMenssagem = tipoDaMenssagem;
	}

	public ArrayList<Long> getPathIda() {
		return pathIda;
	}

	public void setPathIda(ArrayList<Long> pathIda) {
		this.pathIda = pathIda;
	}

	public ArrayList<Double> getLoadIda() {
		return loadIda;
	}

	public void setLoadIda(ArrayList<Double> loadIda) {
		this.loadIda = loadIda;
	}

	public long getSessionId() {
		return sessionId;
	}

	public void setSessionId(long sessionId) {
		this.sessionId = sessionId;
	}

	public long getTargetNode() {
		return targetNode;
	}

	public void setTargetNode(long targetNode) {
		this.targetNode = targetNode;
	}

	@Override
	public Menssagem clone() throws CloneNotSupportedException {
		Menssagem mens = new Menssagem();
		ArrayList pathDeIda = new ArrayList();
		ArrayList loadDeIda = new ArrayList();
		for(int i=0; i <pathIda.size(); i++){
			pathDeIda.add(pathIda.get(i));
			loadDeIda.add(loadIda.get(i));
		}
		mens.setLoadIda(loadDeIda);
		mens.setPathIda(pathDeIda);
		mens.setTargetNode(targetNode);
		mens.setSessionId(sessionId);
		mens.setTipoDaMenssagem(tipoDaMenssagem);
		return mens;
	}
	
	
}
